package userInterfaces;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import managerBean.ModPacchettoManagerBean;
import managerBean.PacchettoManagerBean;
import model.ComponentiPacchetti;
import model.Escursione;
import model.Hotel;
import model.Pacchetto;
import model.Volo;

@ManagedBean(name="ModPacchettoManagedBean")
@ViewScoped
public class ModPacchettoManagedBean {
	
	@EJB
	private ModPacchettoManagerBean ModPackMgrBean;
	
	private Pacchetto pacchettoCorrente=new Pacchetto();
		
	private List<Pacchetto> pacchetti;
	
	private List<Volo> voli;
	
	private List<Hotel> hotels;
	
	private List<Escursione> escursioni;
	
	private List<ComponentiPacchetti> compVolo;
	
	private List<ComponentiPacchetti> compHotel;
	
	private List<ComponentiPacchetti> compEsc;
	
	private List<Volo> voliAndata;
	
	private List<Volo> voliRitorno;
	
	private String cerca;

	public ModPacchettoManagedBean() {
		super();
	}

	public List<Volo> getVoliAndata() {
		return voliAndata;
	}

	public void setVoliAndata(List<Volo> voliAndata) {
		this.voliAndata = voliAndata;
	}

	public List<Volo> getVoliRitorno() {
		return voliRitorno;
	}

	public void setVoliRitorno(List<Volo> voliRitorno) {
		this.voliRitorno = voliRitorno;
	}

	public Pacchetto getPacchettoCorrente() {
		return pacchettoCorrente;
	}

	public void setPacchettoCorrente(Pacchetto pacchettoCorrente) {
		this.pacchettoCorrente = pacchettoCorrente;
	}

	public List<Pacchetto> getPacchetti() {
		return pacchetti;
	}

	public void setPacchetti(List<Pacchetto> pacchetti) {
		this.pacchetti = pacchetti;
	}

	public List<Volo> getVoli() {
		return voli;
	}

	public void setVoli(List<Volo> voli) {
		this.voli = voli;
	}

	public List<Hotel> getHotels() {
		return hotels;
	}

	public void setHotels(List<Hotel> hotels) {
		this.hotels = hotels;
	}

	public List<Escursione> getEscursioni() {
		return escursioni;
	}

	public void setEscursioni(List<Escursione> escursioni) {
		this.escursioni = escursioni;
	}

	public String getCerca() {
		return cerca;
	}

	public void setCerca(String cerca) {
		this.cerca = cerca;
	}
	
	public List<ComponentiPacchetti> getCompVolo() {
		return compVolo;
	}

	public void setCompVolo(List<ComponentiPacchetti> compVolo) {
		this.compVolo = compVolo;
	}

	public List<ComponentiPacchetti> getCompHotel() {
		return compHotel;
	}

	public void setCompHotel(List<ComponentiPacchetti> compHotel) {
		this.compHotel = compHotel;
	}

	public List<ComponentiPacchetti> getCompEsc() {
		return compEsc;
	}

	public void setCompEsc(List<ComponentiPacchetti> compEsc) {
		this.compEsc = compEsc;
	}

	@PostConstruct
	public void init(){
		int idPacchetto=Integer.parseInt(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterValuesMap().get("id")[0]);
		boolean crea = Boolean.parseBoolean(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterValuesMap().get("crea")[0]);
		List<Pacchetto> pacchettiInit=ModPackMgrBean.cercaPacchettoInit(idPacchetto,crea);
		this.pacchettoCorrente=pacchettiInit.get(0);
		crea=false;
	}
	
	public void visualizzaPacchetto(){
		int idPacchetto=this.pacchettoCorrente.getIdPacchetto();
		this.hotels=ModPackMgrBean.getHotelPacchettoMgr(idPacchetto);
		this.voli=ModPackMgrBean.getVoliPacchettoMgr(idPacchetto);		
		this.escursioni=ModPackMgrBean.getEscursioniPacchettoMgr(idPacchetto);
		this.compHotel=ModPackMgrBean.getHotelPacchettoCPMgr(idPacchetto);
		this.compVolo=ModPackMgrBean.getVoliPacchettoCPMgr(idPacchetto);		
		this.compEsc=ModPackMgrBean.getEscursioniPacchettoCPMgr(idPacchetto);
	}
	
	public void rimuoviHotel(int idHotel){
		ModPackMgrBean.rimuoviHotelMgr(this.pacchettoCorrente.getIdPacchetto(),idHotel);
		this.visualizzaPacchetto();
	}
	
	public void rimuoviVolo(int idVolo){
		ModPackMgrBean.rimuoviVoloMgr(this.pacchettoCorrente.getIdPacchetto(),idVolo);
		this.visualizzaPacchetto();
	}
	
	public void rimuoviEscursione(int idEscursione){
		ModPackMgrBean.rimuoviEscursioneMgr(this.pacchettoCorrente.getIdPacchetto(),idEscursione);
		this.visualizzaPacchetto();
	}
	
	public void visualizzaVoli(){
		this.voli=ModPackMgrBean.visualizzaVoliMgr(this.pacchettoCorrente.getIdPacchetto());
	}

	public void aggiungiVoloScelto(int idVolo){
		ModPackMgrBean.aggiungiVoloMgr(this.pacchettoCorrente.getIdPacchetto(),idVolo,"SCELTO");
	}
	
	public void aggiungiVoloNonScelto(int idVolo){
		ModPackMgrBean.aggiungiVoloMgr(this.pacchettoCorrente.getIdPacchetto(),idVolo,"NONSCELTO");
	}
	
	public void visualizzaHotel(){
		this.hotels=ModPackMgrBean.visualizzaHotelMgr(this.pacchettoCorrente.getIdPacchetto());
	}

	public void aggiungiHotelScelto(int idHotel){
		ModPackMgrBean.aggiungiHotelMgr(this.pacchettoCorrente.getIdPacchetto(),idHotel,"SCELTO");
	}
	
	public void aggiungiHotelNonScelto(int idHotel){
		ModPackMgrBean.aggiungiHotelMgr(this.pacchettoCorrente.getIdPacchetto(),idHotel,"NONSCELTO");
	}
	
	public void visualizzaEscursioni(){
		this.escursioni=ModPackMgrBean.visualizzaEscursioniMgr(this.pacchettoCorrente.getIdPacchetto());
	}

	public void aggiungiEscursioneScelto(int idEscursione){
		ModPackMgrBean.aggiungiEscursioneMgr(this.pacchettoCorrente.getIdPacchetto(),idEscursione,"SCELTO");
	}
	
	public void aggiungiEscursioneNonScelto(int idEscursione){
		ModPackMgrBean.aggiungiEscursioneMgr(this.pacchettoCorrente.getIdPacchetto(),idEscursione,"NONSCELTO");
	}
	
	public void cambiaStatoVolo (int idVolo){
		ModPackMgrBean.cambiaStatoVoloMgr(this.pacchettoCorrente.getIdPacchetto(),idVolo);
		visualizzaPacchetto();
	}
	public void cambiaStatoHotel (int idHotel){
		ModPackMgrBean.cambiaStatoHotelMgr(this.pacchettoCorrente.getIdPacchetto(),idHotel);
		visualizzaPacchetto();
	}
	public void cambiaStatoEscursione (int idEscursione){
		ModPackMgrBean.cambiaStatoEscursioneMgr(this.pacchettoCorrente.getIdPacchetto(),idEscursione);
		visualizzaPacchetto();
	}
	
	public void updatePacchetto(){
		ModPackMgrBean.updatePacchettoMgr(this.pacchettoCorrente.getIdPacchetto(),this.pacchettoCorrente.getNome(),this.pacchettoCorrente.getNumeroPersone());
	}
	
	public void cercaHotel(){
		this.hotels=ModPackMgrBean.cercaHotelMgr(this.pacchettoCorrente.getIdPacchetto(), this.cerca);
	}
	
	public void cercaVoli(){
		this.voli=ModPackMgrBean.cercaVoliMgr(this.pacchettoCorrente.getIdPacchetto(), this.cerca);
	}
	
	public void cercaEscursioni(){
		this.escursioni=ModPackMgrBean.cercaEscursioniMgr(this.pacchettoCorrente.getIdPacchetto(), this.cerca);
	}
	
	public void annullaPacchetto() throws IOException{
		ModPackMgrBean.annullaPacchettoMgr(this.pacchettoCorrente.getIdPacchetto());
		FacesContext.getCurrentInstance().getExternalContext().redirect("./visualizzaPacchetti.xhtml");
	}
	
	public void visualizzaVoliAndata(){
		int idPacchetto=this.pacchettoCorrente.getIdPacchetto();
		this.voliAndata=ModPackMgrBean.getVoliAndataMgr(idPacchetto);
	}
	
	public void visualizzaVoliRitorno(){
		int idPacchetto=this.pacchettoCorrente.getIdPacchetto();
		this.voliRitorno=ModPackMgrBean.getVoliRitornoMgr(idPacchetto);
	}
	
	public void sostituisciVoloAndata (int idVolo){
		ModPackMgrBean.sostituisciVoloAndataMgr(this.pacchettoCorrente.getIdPacchetto(),idVolo);
		visualizzaPacchetto();
	}
	
	public void sostituisciVoloRitorno (int idVolo){
		ModPackMgrBean.sostituisciVoloRitornoMgr(this.pacchettoCorrente.getIdPacchetto(),idVolo);
		visualizzaPacchetto();
	}
	
	
}
